home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / gnu / smaltalk.lha / smalltalk-1.1.1 / builtins.st < prev    next >
Text File  |  1991-09-12  |  12KB  |  782 lines

  1. "Smalltalk built in methods.  These are read in by the system initially, to 
  2. prepare the execution environment."
  3.  
  4. "======================================================================
  5. |
  6. | Copyright (C) 1990, 1991 Free Software Foundation, Inc.
  7. | Written by Steve Byrne.
  8. |
  9. | This file is part of GNU Smalltalk.
  10. |
  11. | GNU Smalltalk is free software; you can redistribute it and/or modify it
  12. | under the terms of the GNU General Public License as published by the Free
  13. | Software Foundation; either version 1, or (at your option) any later version.
  14. | GNU Smalltalk is distributed in the hope that it will be useful, but WITHOUT
  15. | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  16. | FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
  17. | details.
  18. | You should have received a copy of the GNU General Public License along with
  19. | GNU Smalltalk; see the file COPYING.  If not, write to the Free Software
  20. | Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  
  21. |
  22.  ======================================================================"
  23.  
  24. "
  25. |     Change Log
  26. | ============================================================================
  27. | Author       Date       Change 
  28. | sbyrne     20 Apr 90      Added SystemDictionary debug to help out with
  29. |              DBX level debugging.
  30. |
  31. | sbyrne     15 Apr 90      Added sqrt primitive (I'm sure this was here before)
  32. |                         must have got lost during breaking out from builtins.
  33. |
  34. | sbyrne      7 Apr 90      Added declare tracing primitive.
  35. |
  36. | sbyrne     13 Jan 90      Experimental Class self-definition.
  37. |
  38. | sbyrne     19 Dec 89      Added filein primitive.
  39. |
  40. | sbyrne     12 Aug 89      Added process and semaphore builtins.
  41. |
  42. | sbyrne      6 Feb 89      Created.
  43. |
  44.  
  45. "
  46.  
  47.  
  48. !Integer methodsFor: 'built ins'!
  49. + arg
  50.     <primitive: 1>
  51.     ^self retry: #+ coercing: arg
  52. !
  53.  
  54. - arg
  55.     <primitive: 2>
  56.     ^self retry: #- coercing: arg
  57. !
  58.  
  59. < arg
  60.     <primitive: 3>
  61.     ^self retry: #< coercing: arg
  62. !
  63.  
  64. > arg
  65.     <primitive: 4>
  66.     ^self retry: #> coercing: arg
  67. !
  68.  
  69. <= arg
  70.     <primitive: 5>
  71.     ^self retry: #<= coercing: arg
  72. !
  73.  
  74. >= arg
  75.     <primitive: 6>
  76.     ^self retry: #>= coercing: arg
  77. !
  78.  
  79. = arg
  80.     <primitive: 7>
  81.     ^self retry: #= coercing: arg
  82. !
  83.  
  84. ~= arg
  85.     <primitive: 8>
  86.     ^self retry: #~= coercing: arg
  87. !
  88.  
  89. * arg
  90.     <primitive: 9>
  91.     ^self retry: #* coercing: arg
  92. !
  93.  
  94. / arg
  95.     <primitive: 10>
  96.     ^self retry: #/ coercing: arg
  97. !
  98.  
  99. \\ arg
  100.     <primitive: 11>
  101.     ^self retry: #\\ coercing: arg
  102. !
  103.  
  104. // arg
  105.     <primitive: 12>
  106.     ^self retry: #// coercing: arg
  107. !
  108.  
  109. quo: arg
  110.     <primitive: 13>
  111.     ^self retry: #quo: coercing: arg
  112. !
  113.  
  114. bitAnd: arg
  115.     <primitive: 14>
  116. !
  117.  
  118. bitOr: arg
  119.     <primitive: 15>
  120. !
  121.  
  122. bitXor: arg
  123.     <primitive: 16>
  124. !
  125.  
  126. bitShift: arg
  127.     <primitive: 17>
  128. !
  129.  
  130. asFloat
  131.     <primitive: 40>
  132. !
  133.  
  134. asObject
  135.     <primitive: 76>
  136.     self primitiveFailed
  137. !
  138.  
  139. asObjectNoFail
  140.     <primitive: 76>
  141.  
  142. !!
  143.  
  144.  
  145.  
  146. !Float methodsFor: 'built ins'!
  147.  
  148. + arg
  149.     <primitive: 41>
  150.     ^self retry: #+ coercing: arg
  151. !
  152.  
  153. - arg
  154.     <primitive: 42>
  155.     ^self retry: #- coercing: arg
  156. !
  157.  
  158. < arg
  159.     <primitive: 43>
  160.     ^self retry: #< coercing: arg
  161. !
  162.  
  163. > arg
  164.     <primitive: 44>
  165.     ^self retry: #> coercing: arg
  166. !
  167.  
  168. <= arg
  169.     <primitive: 45>
  170.     ^self retry: #<= coercing: arg
  171. !
  172.  
  173. >= arg
  174.     <primitive: 46>
  175.     ^self retry: #>= coercing: arg
  176. !
  177.  
  178. = arg
  179.     <primitive: 47>
  180.     ^self retry: #= coercing: arg
  181. !
  182.  
  183. ~= arg
  184.     <primitive: 48>
  185.     ^self retry: #~= coercing: arg
  186. !
  187.  
  188. * arg
  189.     <primitive: 49>
  190.     ^self retry: #* coercing: arg
  191. !
  192.  
  193. / arg
  194.     <primitive: 50>
  195.     ^self retry: #/ coercing: arg
  196. !
  197.  
  198. truncated
  199.     <primitive: 51>
  200. !
  201.  
  202. fractionPart
  203.     <primitive: 52>
  204. !
  205.  
  206. exponent
  207.     <primitive: 53>
  208. !
  209.  
  210. timesTwoPower: arg
  211.     <primitive: 54>
  212. !
  213.  
  214. exp
  215.     <primitive: 160>
  216. !
  217.  
  218. ln
  219.     <primitive: 161>
  220. !
  221.  
  222. raisedTo: aNumber
  223.     <primitive: 164>
  224.     ^self retry: #raisedTo: coercing: aNumber
  225. !
  226.  
  227. sqrt
  228.     <primitive: 166>
  229.     ^self error: 'Primitive Sqrt failed!!!'
  230. !
  231.  
  232. ceiling
  233.     <primitive: 168>
  234. !
  235.  
  236. floor
  237.     <primitive: 169>
  238. !
  239.  
  240. sin
  241.     <primitive: 176>
  242. !
  243.  
  244. cos
  245.     <primitive: 177>
  246. !
  247.  
  248. tan
  249.     <primitive: 178>
  250. !
  251.  
  252. arcSin
  253.     <primitive: 179>
  254. !
  255.  
  256. arcCos
  257.     <primitive: 180>
  258. !
  259.  
  260. arcTan
  261.     <primitive: 181>
  262. !!
  263.  
  264.  
  265.  
  266. !Object methodsFor: 'built ins'!
  267.  
  268. at: index
  269.     <primitive: 60>
  270. !
  271.  
  272. basicAt: index
  273.     <primitive: 60>
  274. !
  275.  
  276. at: index put: value
  277.     <primitive: 61>
  278. !
  279.  
  280. basicAt: index put: value
  281.     <primitive: 61>
  282. !
  283.  
  284. size
  285.     <primitive: 62>
  286. !
  287.  
  288. basicSize
  289.     <primitive: 62>
  290. !
  291.  
  292. become: otherObject
  293.     <primitive: 72>
  294. !
  295.  
  296. instVarAt: index
  297.     <primitive: 73>
  298.     ^self primitiveFailed
  299. !
  300.  
  301. instVarAt: index put: value
  302.     <primitive: 74>
  303.     ^self primitiveFailed
  304. !
  305.  
  306. asOop
  307.     <primitive: 75>
  308. !
  309.  
  310. hash
  311.     <primitive: 75>
  312. !
  313.  
  314. nextInstance
  315.     <primitive: 78>
  316.     ^nil
  317. !
  318.  
  319. perform: selector
  320.     <primitive: 83>
  321. !
  322.  
  323. perform: selector with: arg1
  324.     <primitive: 83>
  325. !
  326.  
  327. perform: selector with: arg1 with: arg2
  328.     <primitive: 83>
  329. !
  330.  
  331. perform: selector with: arg1 with: arg2 with: arg3
  332.     <primitive: 83>
  333. !
  334.  
  335. perform: selector withArguments: argumentsArray
  336.     <primitive: 84>
  337. !
  338.  
  339. == arg
  340.     <primitive: 110>
  341. !
  342.  
  343. = arg
  344.     "The equality test is by default the same as that for equal objects"
  345.     <primitive: 110>
  346. !
  347.  
  348. class
  349.     <primitive: 111>
  350.     self primitiveFailed
  351. !
  352.  
  353. doesNotUnderstand: message
  354.     <primitive: 130>
  355. !
  356.  
  357. error: message
  358.     <primitive: 131>
  359. !
  360.  
  361. basicPrint
  362.     <primitive: 252>
  363. !
  364.  
  365. "### look these messages up to be sure"
  366.  
  367. primitiveFailed
  368.     self error: 'primitive operation failed'
  369. !
  370.  
  371. shouldNotImplement
  372.     self error: 'should not implement'
  373. !
  374.  
  375. subclassResponsibility
  376.     self error: 'the method is the responsibility of the subclass'
  377. !
  378.  
  379. notYetImplemented
  380.     self error: 'not yet implemented'
  381.  
  382. !!
  383.  
  384.  
  385.  
  386. !SystemDictionary methodsFor: 'builtins'!
  387.  
  388. quitPrimitive
  389.     <primitive: 113>
  390.     self primitiveFailed
  391. !
  392.  
  393. monitor: aBoolean
  394.     <primitive: 230>
  395.     self primitiveFailed
  396. !
  397.  
  398.  
  399. backtrace
  400.     "Prints the method invocation stack backtrace, as an aid to debugging"
  401.     <primitive: 140>
  402.     self primitiveFailed
  403. !
  404.  
  405. executionTrace: aBoolean
  406.     <primitive: 141>
  407.     self primitiveFailed
  408. !
  409.  
  410. declarationTrace: aBoolean
  411.     <primitive: 142>
  412.     self primitiveFailed
  413. !
  414.  
  415. snapshot
  416.     <primitive: 250>
  417. !
  418.  
  419. snapshot: aString
  420.     <primitive: 251>
  421. !
  422.  
  423. gcMessage: aBoolean
  424.     <primitive: 231>
  425. !
  426.  
  427. debug                "for DBX.  Set breakpoint in debug() and 
  428.                  invoke this primitive near where you want
  429.                  to stop"
  430.     <primitive: 232>
  431. !
  432.  
  433. verboseTrace: aBoolean
  434.     <primitive: 233>
  435. !!
  436.  
  437.  
  438.  
  439. !Behavior methodsFor: 'built ins'!
  440.  
  441. new
  442.     <primitive: 70>
  443. !
  444.  
  445. basicNew
  446.     <primitive: 70>
  447. !
  448.  
  449. new: numInstanceVariables
  450.     <primitive: 71>
  451. !
  452.  
  453. basicNew: numInstanceVariables
  454.     <primitive: 71>
  455. !
  456.  
  457. someInstance
  458.     <primitive: 77>
  459.     ^nil            "return nil on failure"
  460. !
  461.  
  462. makeDescriptorFor: funcNameString 
  463.   returning: returnTypeSymbol 
  464.   withArgs: argsArray
  465.     <primitive: 249>
  466.     ^self primitiveFailed
  467. !
  468.  
  469. compileString: aString
  470.     <primitive: 253>
  471.     ^self primitiveFailed
  472. !!
  473.  
  474.  
  475.  
  476. !CompiledMethod class methodsFor: 'built ins'!
  477.  
  478. newMethod: numBytecodes header: anInteger
  479.     <primitive: 79>
  480.     ^self primitiveFailed
  481. !!
  482.  
  483.  
  484.  
  485. !CompiledMethod methodsFor: 'built ins'!
  486.  
  487. objectAt: index
  488.     <primitive: 68>
  489.     ^self primitiveFailed
  490. !
  491.  
  492. objectAt: index put: value
  493.     <primitive: 69>
  494.     ^self primitiveFailed
  495. !!
  496.  
  497.  
  498.  
  499. !MethodContext methodsFor: 'built ins'!
  500.  
  501. " Note: the name for this class in the book is 'ContextPart' "
  502.  
  503. blockCopy: block
  504.     <primitive: 80>
  505.  
  506. !!
  507.  
  508. !BlockContext methodsFor: 'built ins'!
  509.  
  510. blockCopy: block
  511.     <primitive: 80>
  512. !
  513.  
  514. value
  515.     <primitive: 81>
  516. !
  517.  
  518. value: arg1
  519.     <primitive: 81>
  520. !
  521.  
  522. value: arg1 value: arg2
  523.     <primitive: 81>
  524. !
  525.  
  526. value: arg1 value: arg2 value: arg3
  527.     <primitive: 81>
  528. !
  529.  
  530. valueWithArguments: argArray
  531.     <primitive: 82>
  532.  
  533. !!
  534.  
  535.  
  536. !ArrayedCollection methodsFor: 'built ins'!
  537.  
  538. size
  539.     <primitive: 62>
  540.  
  541. !!
  542.  
  543.  
  544. !String methodsFor: 'built ins'!
  545.  
  546. size
  547.     <primitive: 62>
  548. !
  549.  
  550. at: index
  551.     <primitive: 63>
  552. !
  553.  
  554. basicAt: index
  555.     <primitive: 63>
  556. !
  557.  
  558. at: index put: value
  559.     <primitive: 64>
  560. !
  561.  
  562. basicAt: index put: value
  563.     <primitive: 64>
  564.  
  565. !!
  566.  
  567.  
  568.  
  569. !Symbol class methodsFor: 'built ins'!
  570.  
  571. intern: aString
  572.     <primitive: 134>
  573.     ^self error: 'Attempted to intern non-string'
  574. !!
  575.  
  576.  
  577.  
  578. !Symbol methodsFor: 'built ins'!
  579.  
  580. hash
  581.     <primitive: 75>
  582.  
  583. !!
  584.  
  585.  
  586.  
  587. !Character class methodsFor: 'built ins'!
  588.  
  589. value: anInteger
  590.     "Returns the character object corresponding to anInteger.  Error if
  591.      anInteger is not an integer, or not in 0..255."
  592.      <primitive: 132>
  593.     ^self error: 'invalid argument type or integer out of range'
  594. !!
  595.  
  596.  
  597.  
  598. !Character methodsFor: 'built ins'!
  599.  
  600. = char
  601.     "Boolean return value; true if the characters are equal"
  602.     <primitive: 110>
  603. !
  604.  
  605. asciiValue
  606.     "Returns the integer value corresponding to self"
  607.     <primitive: 133>
  608. !!
  609.  
  610.  
  611.  
  612. !Dictionary class methodsFor: 'built ins'!
  613.  
  614. new
  615.    <primitive: 135>
  616. !!
  617.  
  618.  
  619. !Dictionary methodsFor: 'built ins'!
  620.  
  621. at: key
  622.     <primitive: 128>
  623. !
  624.  
  625. at: key put: value
  626.     <primitive: 129>
  627.  
  628. !!
  629.  
  630.  
  631.  
  632. !FileStream methodsFor: 'built ins'!
  633.  
  634. fileOp: ioFuncIndex
  635.     <primitive: 254>
  636.     ^self error: 'FileStream primitive operation failed'
  637. !
  638.  
  639. fileOp: ioFuncIndex with: arg1
  640.     <primitive: 254>
  641.     ^self error: 'FileStream primitive operation failed'
  642. !
  643.  
  644. fileOp: ioFuncIndex with: arg1 with: arg2
  645.     <primitive: 254>
  646.     ^self error: 'FileStream primitive operation failed'
  647. !
  648.  
  649. fileIn
  650.     <primitive: 247>
  651.     ^self error: 'fileIn failed!!!'
  652. !!
  653.  
  654.  
  655.  
  656. !Memory class methodsFor: 'basic'!
  657.  
  658. addressOfOOP: anObject
  659.     "Returns the address of the OOP for anObject"
  660.     <primitive: 138>
  661. !
  662.  
  663. addressOf: anObject
  664.     "Returns the address of the actual object that anObject references"
  665.     <primitive: 139>
  666. !!
  667.  
  668.  
  669.  
  670. !ByteMemory class methodsFor: 'basic'!
  671.  
  672. at: address
  673.     "Returns the byte at address as an integer"
  674.     <primitive: 136>
  675. !
  676.  
  677. at: address put: value
  678.     "Sets the byte at ADDRESS (an integer) to be VALUE (INTEGER 0..255)"
  679.     <primitive: 137>
  680.  
  681. !!
  682.  
  683.  
  684.  
  685. !Time class methodsFor: 'builtins'!
  686.  
  687. secondClock
  688.     <primitive: 98>
  689.     ^self primitiveFailed
  690. !
  691.  
  692. millisecondClock
  693.     <primitive: 99>
  694.    ^self primitiveFailed
  695. !!
  696.  
  697.  
  698.  
  699. !Process methodsFor: 'builtins'!
  700.  
  701. resume
  702.     <primitive: 87>
  703.    ^self primitiveFailed
  704. !
  705.  
  706. suspend
  707.     <primitive: 88>
  708.    ^self primitiveFailed
  709. !!
  710.  
  711.  
  712.  
  713. !Semaphore methodsFor: 'builtins'!
  714.  
  715. "communication"
  716.  
  717. signal
  718.     <primitive: 85>
  719.     ^self primitiveFailed
  720. !
  721.  
  722. wait
  723.     <primitive: 86>
  724.     ^self primitiveFailed
  725. !!
  726.  
  727.  
  728.  
  729. !ClassDescription methodsFor: 'builtins'!
  730.  
  731. comment: aString
  732.     <primitive: 143>
  733.     "This method is present so that comment declarations can always work, even
  734.      before the real method is defined."
  735.  
  736. !!
  737.  
  738.  
  739.  
  740. !Class methodsFor: 'builtins'!
  741.  
  742. "These are stubs...they will be replaced with the appropriate class
  743. from Class.st.  These allow for Smalltalk type class declarations
  744. of the built-in classes, so that they may be edited and modified.  This
  745. mostly present to allow for future enhancement in which the Smalltalk source
  746. files take a more active role in the definition of the system, and the 
  747. C definition of the classes diminishes in importance."
  748.  
  749. subclass: classNameString
  750.   instanceVariableNames: stringInstVarNames
  751.   classVariableNames: stringOfClassVarNames
  752.   poolDictionaries: stringOfPoolNames
  753.   category: categoryNameString
  754.     ^nil
  755. !
  756.  
  757. variableSubclass: classNameString
  758.   instanceVariableNames: stringInstVarNames
  759.   classVariableNames: stringOfClassVarNames
  760.   poolDictionaries: stringOfPoolNames
  761.   category: categoryNameString
  762.     ^nil
  763. !
  764.  
  765. variableWordSubclass: classNameString
  766.   instanceVariableNames: stringInstVarNames
  767.   classVariableNames: stringOfClassVarNames
  768.   poolDictionaries: stringOfPoolNames
  769.   category: categoryNameString
  770.     ^nil
  771. !
  772.  
  773. variableByteSubclass: classNameString
  774.   instanceVariableNames: stringInstVarNames
  775.   classVariableNames: stringOfClassVarNames
  776.   poolDictionaries: stringOfPoolNames
  777.   category: categoryNameString
  778.     ^nil    
  779. !!
  780.